/**
 * 登录认证相关的类型定义
 * 包含所有登录、注册、验证码等相关的接口类型
 */

// ============= 基础响应类型 =============

/**
 * 统一响应结构
 */
export interface ApiResponse<T = any> {
  /** 响应码 */
  code: number;
  /** 响应消息 */
  message: string;
  /** 响应数据 */
  data: T;
  /** 是否成功 */
  success: boolean;
}

// ============= 发送短信验证码 =============

/**
 * 发送短信验证码请求参数
 */
export interface SendSmsRequest {
  /** 手机号码 */
  phone: string;
  /** 验证码类型 (login: 登录, register: 注册) */
  type: 'login' | 'register';
}

// ============= 短信登录 =============

/**
 * 短信验证码登录请求参数
 */
export interface SmsLoginRequest {
  /** 手机号码 */
  phone: string;
  /** 短信验证码 */
  smsCode: string;
}

/**
 * 用户信息
 */
export interface UserInfo {
  /** 用户ID */
  id: number;
  /** 用户名 */
  username?: string;
  /** 手机号 */
  phone: string;
  /** 昵称 */
  nickname?: string;
  /** 头像URL */
  avatar?: string;
  /** 邮箱 */
  email?: string;
  /** 用户状态 (1: 正常, 0: 禁用) */
  status: number;
  /** 创建时间 */
  createTime: string;
  /** 更新时间 */
  updateTime: string;
}

/**
 * 短信验证码登录响应数据
 * 注意：token现在通过Cookie传递，不在响应体中返回
 */
export interface SmsLoginResponse {
  /** 令牌过期时间(秒) */
  expiresIn: number;
  /** 用户信息 */
  userInfo: UserInfo;
  /** 是否需要设置密码 */
  needSetPassword: boolean;
}

// ============= 传统用户名密码登录 =============

/**
 * 用户名密码登录请求参数
 */
export interface LoginRequest {
  /** 用户名 */
  username: string;
  /** 密码 */
  password: string;
  /** 是否记住我 */
  rememberMe?: boolean;
}

/**
 * 用户名密码登录响应数据
 * 注意：token现在通过Cookie传递，不在响应体中返回
 */
export interface LoginResponse {
  /** 用户信息 */
  userInfo: UserInfo;
}

// ============= 设置密码 =============

/**
 * 设置密码请求参数
 */
export interface SetPasswordRequest {
  /** 新密码 */
  password: string;
  /** 确认密码 */
  confirmPassword: string;
}

// ============= 刷新令牌 =============

/**
 * 刷新令牌响应数据
 */
export interface RefreshTokenResponse {
  /** 访问令牌 */
  accessToken: string;
  /** 刷新令牌 */
  refreshToken: string;
  /** 令牌类型 */
  tokenType: string;
  /** 令牌过期时间(秒) */
  expiresIn: number;
}

// ============= 检查可用性 =============

/**
 * 检查用户名可用性响应
 */
export interface CheckUsernameResponse {
  /** 是否可用 */
  available: boolean;
}

/**
 * 检查手机号是否存在响应
 */
export interface CheckPhoneResponse {
  /** 是否存在 */
  exists: boolean;
}

// ============= 表单数据类型 =============

/**
 * 短信登录表单数据
 */
export interface SmsLoginFormData {
  /** 手机号 */
  phone: string;
  /** 验证码 */
  smsCode: string;
}

/**
 * 密码登录表单数据
 */
export interface PasswordLoginFormData {
  /** 用户名 */
  username: string;
  /** 密码 */
  password: string;
  /** 是否记住我 */
  rememberMe?: boolean;
}

/**
 * 设置密码表单数据
 */
export interface SetPasswordFormData {
  /** 新密码 */
  password: string;
  /** 确认密码 */
  confirmPassword: string;
}

// ============= 错误类型 =============

/**
 * API错误信息
 */
export interface ApiError {
  /** 错误码 */
  code: number;
  /** 错误消息 */
  message: string;
  /** 详细错误信息 */
  details?: any;
}

// ============= 登录状态 =============

/**
 * 登录状态枚举
 */
export enum LoginStatus {
  /** 未登录 */
  NOT_LOGGED_IN = 'NOT_LOGGED_IN',
  /** 已登录 */
  LOGGED_IN = 'LOGGED_IN',
  /** 需要设置密码 */
  NEED_SET_PASSWORD = 'NEED_SET_PASSWORD',
  /** 登录过期 */
  EXPIRED = 'EXPIRED'
}

/**
 * 验证码类型枚举
 */
export enum SmsType {
  /** 登录验证码 */
  LOGIN = 'login',
  /** 注册验证码 */
  REGISTER = 'register'
}